﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace SeguradoraIA.Framework
{
    public class Format
    {
        #region " FormatarCpf "
        /// <summary>
        /// Formata Cpf
        /// </summary>
        /// <param name="cpf">cpf para formatacao</param>
        /// <returns>cpf formatado</returns>
        public static string FormatarCpf(string cpf)
        {
            if (string.IsNullOrEmpty(cpf))
                return "";
            else
            {
                string cpfFormatado = cpf;

                cpf = cpf.Replace("-", "").Replace(".", "");

                if (cpf.Length >= 11)
                {
                    cpfFormatado = string.Format("{0}.{1}.{2}-{3}", cpf.Substring(0, 3), cpf.Substring(3, 3), cpf.Substring(6, 3), cpf.Substring(9));
                }

                return cpfFormatado;
            }
        }
        #endregion

        #region " Retorna o valor truncado "
        public static decimal ObtemValorCampoDecimalTruncado(decimal valor, int precisao)
        {
            // Calcula o fator multiplicador
            decimal fator = (decimal)Math.Pow(10d, precisao);

            // Obtem o valor que queremos junto com a parte inteira,
            // e desprezamos os valores decimais restantes
            decimal valorTruncado = Math.Floor(valor * fator);

            // Agora divide pelo fator multiplicado para obter de volta
            // as casas decimais que foram parar na parte inteira (na multiplicação acima)
            return Math.Floor((Math.Round(valorTruncado, precisao))) / fator;
        }
        #endregion

        #region " Remover Acentuacao "

        public static string RemoverAcentuacao(string texto)
        {
            texto = texto.Normalize(NormalizationForm.FormD);
            StringBuilder sb = new StringBuilder();
            foreach (char c in texto.ToCharArray())
                if ((CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber)
                    || (CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.LowercaseLetter)
                    || (CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.SpaceSeparator)
                    || (CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.UppercaseLetter))
                    sb.Append(c);

            return sb.ToString();
        }

        #endregion

        #region "Formatar Dinheiro"

        public static string FormatarDinheiro(string valor, string separadorMil, string separadorDecimal, string simbolo)
        {

            String[] aryValue = valor.Split(Convert.ToChar(separadorDecimal));
            string p1 = "";
            string p2 = "";
            int cont = 0;

            if (aryValue.Length > 1)
                p2 = separadorDecimal + aryValue[1].PadRight(2, '0').Substring(0, 2);
            else
                p2 = separadorDecimal + "00";

            if (!string.IsNullOrEmpty(simbolo))
                simbolo += " ";

            for (int i = 0; i < aryValue[0].Length; i++)
            {
                cont++;
                p1 = aryValue[0].Substring(aryValue[0].Length - 1 - i, 1) + p1;
                if (cont == 3 && i != aryValue[0].Length - 1)
                {
                    p1 = separadorMil + p1;
                    cont = 0;
                }
            }
            return simbolo + p1 + p2;
        }

        #endregion
    }
}
